package com.sumainfor.wx.tenant.controller.alipay;


import com.sumainfor.common.alipayutils.SSLClient;
import com.sumainfor.common.alipayutils.SignUtils;
import org.apache.http.HttpResponse;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * 0109-支付宝扫码支付
 * @author yqh @date 2017年4月10日
 */
public class AlipayScancode {
	public static void main(String[] args) throws Exception {
		DefaultHttpClient httpClient = new SSLClient();
        HttpPost postMethod = new HttpPost("https://www.zfzlpay.com/payment-gate-web/gateway/api/backTransReq");
        List<BasicNameValuePair> nvps = new ArrayList<BasicNameValuePair>();
        nvps.add(new BasicNameValuePair("requestNo", new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date())));//请求流水号
        nvps.add(new BasicNameValuePair("version", "V1.0"));//版本号 3.0为异步通知返回卡类型
        nvps.add(new BasicNameValuePair("productId", "0105"));//产品类型
//        nvps.add(new BasicNameValuePair("acctNo", "6217001180033516058"));//卡号 0129必传
//        nvps.add(new BasicNameValuePair("customerName", "李浩"));//持卡人 0129必传
        nvps.add(new BasicNameValuePair("openid", "o7I8Ht4FR7y_SZHpFR5rvj4mcS6A"));//0105必须填写openid。0108时为sub_appid(个人微信openid)
 //       nvps.add(new BasicNameValuePair("userId", "2088802646833765"));//0115  0145必须填写，支付宝的userid  伟华的支付宝  返回的tradeNo截取掉前两位后发送前端进行支付
        nvps.add(new BasicNameValuePair("transId", "10"));//交易类型
        nvps.add(new BasicNameValuePair("merNo", "885440059321286"));//机构商户号
        nvps.add(new BasicNameValuePair("terMerNo", "8862900100000011019"));//终端商户号
        nvps.add(new BasicNameValuePair("orderDate", "20191206"));//订单日期
        nvps.add(new BasicNameValuePair("subMerNo", "10000000160100000001"));//商户识别id  8862900100000011005002支付宝   8862900100000011005001微信
        nvps.add(new BasicNameValuePair("orderNo", "143333333333338111"));//商户订单号
        nvps.add(new BasicNameValuePair("notifyUrl", "wwww.baidu.com"));//异步通知地址
        nvps.add(new BasicNameValuePair("transAmt", "1"));//交易金额，单位 分
        nvps.add(new BasicNameValuePair("commodityName", "唐巢的房租费用"));//商品名称
        nvps.add(new BasicNameValuePair("commodityDesc", "房租"));//商品描述
//        nvps.add(new BasicNameValuePair("storeId", "d10001"));//e0109/0110必须填写，门店编号,需要可区分开门店
//        nvps.add(new BasicNameValuePair("terminalId", "d10001"));//0109/0110必须填写，商户终端编号,需要可区分开门店
//        nvps.add(new BasicNameValuePair("limitPay", "no_credit"));//微信支付宝可使用此参数指定不能使用信用卡支付
        nvps.add(new BasicNameValuePair("subChnlMerNo", "100000001601"));//子商户号100000001399支付宝   100000001397微信
        nvps.add(new BasicNameValuePair("subMerName", "上海唐巢投资有限公司"));//子商户号名称 必须为实际店名，不得用个人名称代替，否则会存在风控限制
        nvps.add(new BasicNameValuePair("signature", SignUtils.signData(nvps)));//签名
        try {
            postMethod.setEntity(new UrlEncodedFormEntity(nvps, "UTF-8"));
            HttpResponse resp = httpClient.execute(postMethod);
            String str = EntityUtils.toString(resp.getEntity(), "UTF-8");
            int statusCode = resp.getStatusLine().getStatusCode();
            if (200 == statusCode) {
                boolean signFlag = SignUtils.verferSignData(str);
                if (!signFlag) {
                    System.out.println("验签失败");
                    return;
                }
                System.out.println("验签成功");
                return;
            }
            System.out.println("返回错误码:" + statusCode);
        } catch (Exception e) {
            e.printStackTrace();
        }
	}


//    public static void main(String[] args) throws Exception {
//        // 使用返回的htmlInfo
//        DefaultHttpClient httpClient = new SSLClient();
//        HttpPost postMethod = new HttpPost("https://www.zfzlpay.com/payment-gate-web/gateway/api/backTransReq");
//        List<BasicNameValuePair> nvps = new ArrayList<BasicNameValuePair>();
//        nvps.add(new BasicNameValuePair("requestNo", new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date())));//请求流水号
//        nvps.add(new BasicNameValuePair("version", "新接口V1.0"));//版本号 3.0为异步通知返回卡类型
//        nvps.add(new BasicNameValuePair("productId", "0148"));//产品类型
//        nvps.add(new BasicNameValuePair("transId", "60"));//
//        nvps.add(new BasicNameValuePair("merNo", "888290058111340"));//产品类型
//        nvps.add(new BasicNameValuePair("orderDate", "20191126"));//订单日期
//        nvps.add(new BasicNameValuePair("orderNo", "201911260000005"));//商户订单号
//        nvps.add(new BasicNameValuePair("notifyUrl", "http://www.123.com"));//异步通知地址
//        nvps.add(new BasicNameValuePair("transAmt", "1"));//交易金额 分
//        nvps.add(new BasicNameValuePair("commodityName", "10月水费"));//商品名称
//        nvps.add(new BasicNameValuePair("phoneNo", "18621599881"));//预留手机号
//        nvps.add(new BasicNameValuePair("customerName", "朱裕佳"));//持卡人姓名
//        nvps.add(new BasicNameValuePair("cerdType", "01"));//证件类型
//        nvps.add(new BasicNameValuePair("cerdId", "310115198610208415"));//证件号
//        nvps.add(new BasicNameValuePair("acctNo", "6217001210031557281"));//卡号
//        nvps.add(new BasicNameValuePair("frontUrl", "http://www.baidu.com?param=123"));//前台通知地址
//        nvps.add(new BasicNameValuePair("signature", SignUtils.signData(nvps)));//签名
//        try {
//            postMethod.setEntity(new UrlEncodedFormEntity(nvps, "UTF-8"));
//            HttpResponse resp = httpClient.execute(postMethod);
//            String str = EntityUtils.toString(resp.getEntity(), "UTF-8");
//            int statusCode = resp.getStatusLine().getStatusCode();
//            if (200 == statusCode) {
//                boolean signFlag = SignUtils.verferSignData(str);
//                if (!signFlag) {
//                    System.out.println("验签失败");
//                    return;
//                }
//                System.out.println("验签成功");
//                return;
//            }
//            System.out.println("返回错误码:" + statusCode);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
}
